package com.design.观察者模式;

public class TestMain {

	public static void main(String[] args) {
		/**
		 * 
		 * 其实就是发布订阅模式，发布者发布信息，订阅者获取信息，订阅了就能收到信息，没订阅就收不到信息。
		 * 
		 * 抽象被观察者角色：也就是一个抽象主题，它把所有对观察者对象的引用保存在一个集合中，每个主题都可以有任意数量的观察者。抽象主题提供一个接口，可以增加和删除观察者角色。一般用一个抽象类和接口来实现。
		        抽象观察者角色：为所有的具体观察者定义一个接口，在得到主题通知时更新自己。
		        具体被观察者角色：也就是一个具体的主题，在集体主题的内部状态改变时，所有登记过的观察者发出通知。
		        具体观察者角色：实现抽象观察者角色所需要的更新接口，一边使本身的状态与制图的状态相协调。
		 * 
		 * 
		 */
		
		
		WechatServer server = new WechatServer();
		
		Observer u1 = new User("张三");
		Observer u2 = new User("李四");
		Observer u3 = new User("王麻子");
		
		server.registerObserver(u1);
		server.registerObserver(u2);
		server.registerObserver(u3);
		
		server.setInfomation(" 来了 ",EnumObserverType.ALL);
		
		System.out.println("---------");
		
		server.removeObserver(u1);
		server.setInfomation(((User)u1).getName()+" 退出了",EnumObserverType.DELETE);
	}
}
